//
// This is a utility to help resolve cases where `window.fetch` throws a
// `TypeError: Failed to Fetch` without any stack or context for the request
// https://github.com/getsentry/sentry-javascript/pull/1293
//

export default function setupFetchDebugging() {
  if (!window.fetch) {
    return;
  }
  const originalFetch = window.fetch;

  window.fetch = wrappedFetch;

  async function wrappedFetch(...args) {
    const initialStack = getCurrentStack();
    try {
      return await originalFetch.call(window, ...args);
    } catch (err) {
      if (!err.stack) {
        console.warn(
          'FetchDebugger - fetch encountered an Error without a stack',
          err,
        );
        console.warn(
          'FetchDebugger - overriding stack to point of original call',
        );
        err.stack = initialStack;
      }
      throw err;
    }
  }
}

function getCurrentStack() {
  try {
    throw new Error('Fake error for generating stack trace');
  } catch (err) {
    return err.stack;
  }
}
